const genericPool = require('generic-pool');
const mysql = require('mysql2/promise');

const dbConfig = {}
const poolConfig = {
  max: 10, // 最大连接数
  min: 2, // 最小连接数
  acquireTimeoutMillis: 30000, // 获取连接的超时时间（毫秒）
  create: create, // 创建新连接的工厂函数
  destroy: destroy, // 销毁连接的函数
  validate: validate // 验证连接是否有效的函数
}

// 创建工厂函数，用于生成新的MySQL数据库连接
function create(conf) {
  return mysql.createConnection({
    host: dbConfig.host,
    user: dbConfig.user || dbConfig.username,
    password: dbConfig.passwd || dbConfig.password,
    database: dbConfig.db || dbConfig.database
  });
}

// 销毁函数，用于关闭MySQL数据库连接
function destroy(connection) {
  return connection.end();
}

// 验证函数，用于检查连接是否仍然有效
function validate(connection) {
  return connection.ping();
}

function init(conf) {
  // 配置数据库选项
  Object.assign(dbConfig, conf.dbMysql);
  // 配置连接池选项
  Object.assign(poolConfig, conf.dbPool);
  // 创建连接池
  const pool = genericPool.createPool(poolConfig);
  return pool;
}

function close(pool) {
  // 当不再需要连接池时，可以清空并关闭它
  pool.drain()
    .then(() => pool.clear())
    .catch(console.error);
}

module.exports = { init, close }